iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

在 CTF 的 Reverse / Pwn 題裡,會常常碰到要讀懂一小段 assembly 才能找到 flag 或漏洞。學會看組合語言、認識寄存器與 calling convention,就能在很多題目裡快攻破點關鍵。

什麼是組合語言(Assembly)?

  • 組合語言是介於高階語言(C/Python)與機器碼之間的低階語言:對應到 CPU 的指令集(像是 x86-64、ARM、MIPS 等)。
  • 編譯器把高階語言編譯成機器碼,反編譯/反匯編器則把機器碼還原成 assembly(不會回到原始的高階語意,但能看出流程)。
  • 在 CTF 裡,我們常用 assembly 來:追蹤程式流程、找驗證邏輯、定位呼叫與返回、看參數如何傳遞(找 bug / 找 flag)。

常見的 CPU 架構

  • x86-64 (AMD64):目前最常見的 PC 題目(Linux pwn / reverse)。寄存器有 rax, rbx, rcx, rdx, rsi, rdi, rbp, rsp, rip 等。
  • x86 (32-bit):老題或特定環境,呼叫 convention 不同(eax, ebx...)。
  • ARM / AArch64:手機、嵌入式或某些 webassembly 背後編譯出來的 code。寄存器是 r0-r12 / x0-x30

在做題前先確認 binary 的架構:file ./binary

常見 assembly 觀察重點

  • 比較/條件跳轉cmp / test + je/jne/jg/jl —— 通常是驗證邏輯
  • 呼叫(call)與回傳(ret):看哪個函式被呼叫,呼叫後用 mov 把結果放到某個地方
  • 記憶體讀寫mov [rbp-0x20], raxmov al, [rdi] —— 對應到 buffer/字串讀寫,找 buffer overflow 點或字串比較。
  • 資料段(.data/.rodata):flag 或 magic strings 常放在這裡,objdump -s -j .rodata 可查看。

x86-64 常用指令

  • mov dst, src:複製/讀寫。
  • lea reg, [mem]:load effective address
  • push/pop:stack 操作。
  • call / ret:函式呼叫/返回。
  • cmp a,b / test a,b:比較 / 檢查 0。
  • je/jne/jg/jl/ja/jb:條件跳轉(根據 flags)。
  • xor reg, reg:清零或 XOR;常見 xor rax, rax
  • inc/dec:+1 / -1。
  • add/sub:加減。

picoCTF - asm1

這題給了一個反組譯程式問輸入0x2e0會回傳什麼

asm1:
	<+0>:	push   ebp
	<+1>:	mov    ebp,esp
	<+3>:	cmp    DWORD PTR [ebp+0x8],0x3fb
	<+10>:	jg     0x512 <asm1+37>
	<+12>:	cmp    DWORD PTR [ebp+0x8],0x280
	<+19>:	jne    0x50a <asm1+29>
	<+21>:	mov    eax,DWORD PTR [ebp+0x8]
	<+24>:	add    eax,0xa
	<+27>:	jmp    0x529 <asm1+60>
	<+29>:	mov    eax,DWORD PTR [ebp+0x8]
	<+32>:	sub    eax,0xa
	<+35>:	jmp    0x529 <asm1+60>
	<+37>:	cmp    DWORD PTR [ebp+0x8],0x559
	<+44>:	jne    0x523 <asm1+54>
	<+46>:	mov    eax,DWORD PTR [ebp+0x8]
	<+49>:	sub    eax,0xa
	<+52>:	jmp    0x529 <asm1+60>
	<+54>:	mov    eax,DWORD PTR [ebp+0x8]
	<+57>:	add    eax,0xa
	<+60>:	pop    ebp
	<+61>:	ret    

我們順著程式邏輯看下去

<+10>會判斷是否>0x3fb,答案為否所以不跳轉
<+19>會判斷是否不=0x280,答案為是,所以跳轉到<+29>
<+29> eax = 0x2e0
<+32> eax = eax - 0xa = 0x2d6,然後跳到<+60>
所以最後回傳的就是eax的值就是0x2d6


以上就是今天的內容啦

想看更多,記得明天再來喔~


上一篇
Day 24 - SSTI
下一篇
Day26 - gdb
系列文
一天一題picoCTF:從Easy開始的新手生活27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言